package main

import (
	"github.com/sirupsen/logrus" // 用于日志记录
	"github.com/urfave/cli"      // 构建 Go 语言命令行应用程序的流行库
	"os"
)

const usage = `mydocker is a simple container runtime implementation.
			   The purpose of this project is to learn how docker works and how to write a docker by ourselves
			   Enjoy it, just for fun.`

func main() {
	app := cli.NewApp()    // 创建一个新的 urfave/cli 应用程序实例
	app.Name = "my-docker" // 设置应用程序的名称
	app.Usage = usage      // 设置应用程序的使用说明

	app.Commands = []cli.Command{ // 定义应用程序的子命令列表，这些命令的具体实现要在其他地方定义
		initCommand,
		runCommand,
		commitCommand,
		listCommand,
		logCommand,
		execCommand,
		stopCommand,
		removeCommand,
		networkCommand,
	}
	app.Before = func(c *cli.Context) error { // 在执行任何命令之前，Before 钩子用于配置日志记录器
		// 设置日志格式为 JSON 格式，并输出到标准输出
		logrus.SetFormatter(&logrus.JSONFormatter{})
		logrus.SetOutput(os.Stdout)
		return nil
	}
	if err := app.Run(os.Args); err != nil { // 运行应用程序，使用 os.Args 传递命令行参数
		logrus.Fatal(err)
	}
}
